/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tp1.controllers;

/**
 *
 * @author Alu
 */

import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import tp1.Main;
import tp1.dao.ChamadaDao;
import tp1.dao.LinhaDao;
import tp1.models.Chamada;
import tp1.models.Linha;
import tp1.views.ChamadaPanel;

/**
 *
 * @author tulio
 */

public class ChamadaController extends Controller{

    protected static ChamadaController instance = null;

    public static ChamadaController getInstance(int controller, JPanel view){
        if(instance == null) {
            instance = new ChamadaController(view);
        }
        return instance;
    }

    protected ChamadaController(JPanel view) {
        super(view);
    }

    @Override
    public void action(int event) {
        switch(event){
            case Controller.EVENTO_ABRIR_TELA_CHAMADA:
                abrirAction();
                break;
            case Controller.EVENTO_SALVAR_CHAMADA:
                salvarAction();
                break;
            case Controller.EVENTO_APAGAR_CHAMADA:
                apagarAction();
                break;
            case Controller.EVENTO_NOVO_CHAMADA:
                novoAction();
                break;
            case Controller.EVENTO_EDITAR_CHAMADA:
                editarAction();
                break;
            case Controller.EVENTO_BUSCAR_CHAMADA:
                buscarAction();
                break;
        }
    }

    public void salvarAction(){
        ChamadaPanel chamadaPanel = (ChamadaPanel) this.view;

        String strId = chamadaPanel.getFieldID().getText();
        int id = 0;
        
        if (!strId.equals("")) {
            id = Integer.parseInt(strId);
        }
        
        String numOrigem = chamadaPanel.getFieldOrigem().getText();
        String numDestino = chamadaPanel.getFieldDestino().getText();
        String strInicio = chamadaPanel.getFieldInicio().getText();
        String strFim = chamadaPanel.getFieldFim().getText();

        Date inicio = Main.formataData(strInicio);
        Date fim = Main.formataData(strFim);
        try {
            Linha origem = LinhaDao.find(numOrigem);
            Linha destino = LinhaDao.find(numDestino);

            Chamada c = new Chamada();
            c.setId(id);
            c.setOrigem(origem);
            c.setDestino(destino);
            c.setInicio(inicio);
            c.setFim(fim);


            if(ChamadaDao.save(c) == 1){
                chamadaPanel.updateGridData();
                JOptionPane.showMessageDialog(chamadaPanel, "Registro salvo com sucesso.");
            } else {
                JOptionPane.showMessageDialog(chamadaPanel, "Nenhum registro salvo.");
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(chamadaPanel, ex.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void apagarAction(){
        ChamadaPanel chamadaPanel = (ChamadaPanel) this.view;
        try {
            int row = chamadaPanel.getGridChamada().getSelectedRow();
            Object id = chamadaPanel.getGridChamada().getModel().getValueAt(row, 0);
            if(ChamadaDao.delete(id.toString()) == 1){
                chamadaPanel.updateGridData();
                JOptionPane.showMessageDialog(chamadaPanel, "Registro apagado com sucesso.");
            } else {
                JOptionPane.showMessageDialog(chamadaPanel, "Nenhum registro apagado. ID inválido.");
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(chamadaPanel, ex.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);        
        } catch (Exception e) {
            JOptionPane.showMessageDialog(chamadaPanel, e.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void novoAction(){
        ChamadaPanel chamadaPanel = (ChamadaPanel) this.view;
        chamadaPanel.getFieldOrigem().setEditable(true);
        chamadaPanel.getFieldDestino().setEditable(true);

        chamadaPanel.getFieldID().setText("");
        chamadaPanel.getFieldOrigem().setText("");
        chamadaPanel.getFieldDestino().setText("");
        chamadaPanel.getFieldInicio().setText("");
        chamadaPanel.getFieldFim().setText("");

        chamadaPanel.getTabs().setSelectedIndex(1);
    }

    public void editarAction(){
        ChamadaPanel chamadaPanel = (ChamadaPanel) this.view;

        if(chamadaPanel.getGridChamada().getSelectedRow() != -1){
            chamadaPanel.getTabs().setSelectedIndex(1);
        } else {
            JOptionPane.showMessageDialog(chamadaPanel, "Nenhum linha selecionada. Para editar, primeiro selecione uma linha.");
        }
    }

    public void buscarAction(){
        ChamadaPanel chamadaPanel = (ChamadaPanel) this.view;
        String value = JOptionPane.showInputDialog(chamadaPanel, "Qual é o Número de origem chamada que deseja localizar?", "Busca", JOptionPane.QUESTION_MESSAGE);
        Object[][] data;
        try {
            data = ChamadaDao.findAsVector(value);
            chamadaPanel.setGridData(data);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(chamadaPanel, ex.getMessage());
        }
    }
    
}
